/**
 * Created by 王健 on 2018/3/5.
 */
var friendHeadUrl = null;
var maxNameLen = 10;
var identifier = null;
var realname = null;
var icon_url = null;

var getPrePageC2CHistroyMsgInfoMap = {};

//sdk登录
function webimLogin(iden, rname, userSig, icon_url, cb) {
    identifier = iden;
    realname = rname;
    icon_url = icon_url;
    webim.login(
        {
            sdkAppID: 1400098024,
            accountType: 28308,
            identifier: iden,
            identifierNick: rname,
            userSig: userSig
        }, listeners, {isAccessFormalEnv: true, isLogOn: true},
        function (resp) {
            // loginInfo.identifierNick = resp.identifierNick;//设置当前用户昵称
            // initDemoApp();
            initInfoMapByMyFriends(function () {
                webim_init_contactlist(function(){
                    var current_imusername = client_storage("current_imusername");
                    var current_realname = client_storage("current_realname");
                    var goods_id = client_storage("goods_id");
                    var goodsstore_id = client_storage("goodsstore_id");
                    client_storage("current_imusername", "");
                    client_storage("current_realname", "");
                    client_storage("goods_id", "");
                    client_storage("goodsstore_id", "");



                    if(current_imusername){
                        initfindUserInfo([current_imusername], function () {
                            if(!goodsstore_id){
                                goodsstore_id = 0;
                            }
                            open_chat(webim.SESSION_TYPE.C2C, current_imusername, current_realname, goodsstore_id);
                        })
                    }
                });
            });
            // initUnreadMsgCount();

            setProfilePortrait(rname, icon_url);

            if(cb){
                cb();
            }

        },
        function (err) {
            alert(err.ErrorInfo);
        }
    );
    _(webim.Emotions).each(function (item, i) {
        item[1] = 'img2/face/'+i+'.png';
    });
    chat_data.facelist = webim.Emotions;
    console.log(chat_data.facelist);
}

//设置个人资料
var setProfilePortrait = function (nickname, icon_url) {


    var profile_item = [
        {
            "Tag": "Tag_Profile_IM_Nick",
            "Value": nickname
        }
    ];
    if(icon_url){
        profile_item.push(
            {
                "Tag":"Tag_Profile_IM_Image",
                "Value":icon_url
            });
    }
    var options = {
        'ProfileItem': profile_item
    };

    webim.setProfilePortrait(
        options,
        function (resp) {
            console.log(resp);
        },
        function (err) {
            console.log(err);
            // alert(err.ErrorInfo);
        }
    );
};

//初始化最近会话的消息未读数
function initUnreadMsgCount(){
    var sess;
    var sessMap=webim.MsgStore.sessMap();
    var count = 0;
    for (var i in sessMap) {
        sess = sessMap[i];
        if (chat_data.selToID != sess.id()) {//更新其他聊天对象的未读消息数

            if(chat_data.recentSessMap[sess.type()+"_"+sess.id()]){
                count += sess.unread();
                chat_data.recentSessMap[sess.type()+"_"+sess.id()]["UnreadMsgCount"] = sess.unread();
            }

            // updateSessDiv(sess.type(), sess.id(), sess.name(), sess.unread());
        }
    }
    home_data.all_unread = count;
}

var initfindUserInfo = function (userlist, cbOK) {
    if(userlist.length==0){
        if (cbOK)
            cbOK();
        return;
    }
    api.sys.query_host_by_imusername_list({imusernames:userlist.join(",")}).then(function (imdata) {
        _(imdata.result.list).each(function (item) {
            var key=webim.SESSION_TYPE.C2C+"_"+item.imusername+"_"+item.goodsstore_id;
            var obj = chat_data.infoMap[key];
            if(!obj){
                chat_data.infoMap[key]={
                    'name':item.realname,
                    'image':item.icon_url,
                    'host_type': item.host_type,
                    'liveprogram__name': item.liveprogram__name,
                    'live_status': item.live_status,
                    'liveprogram__desc': item.liveprogram__desc,
                    'liveprogram__image__fileurl': item.liveprogram__image__fileurl,
                    'goods_list': item.goods
                };
            }else{
                obj['name'] = item.realname;
                obj['image'] = item.icon_url;
                obj['host_type'] = item.host_type;
                obj['liveprogram__name'] = item.liveprogram__name;
                obj['live_status'] = item.live_status;
                obj['liveprogram__desc'] = item.liveprogram__desc;
                obj['liveprogram__image__fileurl'] = item.liveprogram__image__fileurl;
                obj['goods_list'] = item.goods;

            }
        });
        if (cbOK)
            cbOK();

    });

    // var options = {
    //     "To_Account":userlist,
    //     "TagList":
    //         [
    //             "Tag_Profile_IM_Nick",
    //             "Tag_Profile_IM_AllowType",
    //             "Tag_Profile_IM_Image"
    //         ]
    // };
    // webim.getProfilePortrait(options, function (resp) {
    //     if (resp.UserProfileItem && resp.UserProfileItem.length > 0) {
    //         for (var i in resp.UserProfileItem) {
    //             var to_account = resp.UserProfileItem[i].To_Account;
    //             var nick = null, gender = null, allowType = null,imageUrl=null;
    //             for (var j in resp.UserProfileItem[i].ProfileItem) {
    //                 switch (resp.UserProfileItem[i].ProfileItem[j].Tag) {
    //                     case 'Tag_Profile_IM_Nick':
    //                         nick = resp.UserProfileItem[i].ProfileItem[j].Value;
    //                         break;
    //                     case 'Tag_Profile_IM_Gender':
    //                         switch (resp.UserProfileItem[i].ProfileItem[j].Value) {
    //                             case 'Gender_Type_Male':
    //                                 gender = '男';
    //                                 break;
    //                             case 'Gender_Type_Female':
    //                                 gender = '女';
    //                                 break;
    //                             case 'Gender_Type_Unknown':
    //                                 gender = '未知';
    //                                 break;
    //                         }
    //                         break;
    //                     case 'Tag_Profile_IM_AllowType':
    //                         switch (resp.UserProfileItem[i].ProfileItem[j].Value) {
    //                             case 'AllowType_Type_AllowAny':
    //                                 allowType = '允许任何人';
    //                                 break;
    //                             case 'AllowType_Type_NeedConfirm':
    //                                 allowType = '需要确认';
    //                                 break;
    //                             case 'AllowType_Type_DenyAny':
    //                                 allowType = '拒绝任何人';
    //                                 break;
    //                             default:
    //                                 allowType = '需要确认';
    //                                 break;
    //                         }
    //                         break;
    //                     case 'Tag_Profile_IM_Image':
    //                         imageUrl = resp.UserProfileItem[i].ProfileItem[j].Value;
    //                         break;
    //                 }
    //             }
    //             var key=webim.SESSION_TYPE.C2C+"_"+to_account;
    //             var obj = chat_data.infoMap[key];
    //             if(!obj){
    //                 chat_data.infoMap[key]={
    //                     'name':nick,
    //                     'AllowType': allowType,
    //                     'image':imageUrl,
    //                     'liveprogram__name': "",
    //                     'liveprogram__desc': "",
    //                     'goods_list': []
    //                 };
    //             }else{
    //                 obj['name'] = nick;
    //                 obj['image'] = imageUrl;
    //                 obj['AllowType'] = allowType;
    //             }
    //
    //         }
    //         if (cbOK)
    //             cbOK();
    //     }else{
    //         alert(resp);
    //     }
    // });
}

//将我的好友资料（昵称和头像）保存在infoMap
var initInfoMapByMyFriends = function (cbOK) {
    var totalCount = 100;
    var options = {
        'From_Account': identifier,
        'TimeStamp': 0,
        'StartIndex': 0,
        'GetCount': totalCount,
        'LastStandardSequence': 0,
        "TagList": [
            "Tag_Profile_IM_Nick",
            "Tag_Profile_IM_Image"
        ]
    };

    webim.getAllFriend(
        options,
        function (resp) {
            var imusernames = [];
            if (resp.FriendNum > 0) {

                var friends = resp.InfoItem;
                if (!friends || friends.length == 0) {
                    if (cbOK)
                        cbOK();
                    return;
                }
                var count = friends.length;
                for (var i = 0; i < count; i++) {
                    var friend=friends[i];
                    var friend_account = friend.Info_Account;
                    imusernames.push(friend_account);
                    //
                    // var friend_name=friend_image='';
                    // for (var j in friend.SnsProfileItem) {
                    //     switch (friend.SnsProfileItem[j].Tag) {
                    //         case 'Tag_Profile_IM_Nick':
                    //             friend_name = friend.SnsProfileItem[j].Value;
                    //             break;
                    //         case 'Tag_Profile_IM_Image':
                    //             friend_image = friend.SnsProfileItem[j].Value;
                    //             break;
                    //     }
                    // }
                    // var key=webim.SESSION_TYPE.C2C+"_"+friend_account;
                    // var obj = chat_data.infoMap[key];
                    // if(!obj){
                    //     chat_data.infoMap[key]={
                    //         'name':friend_name,
                    //         'image':friend_image,
                    //         'liveprogram__name': "",
                    //         'liveprogram__desc': "",
                    //         'goods_list': []
                    //     };
                    // }else{
                    //     obj['name'] = friend_name;
                    //     obj['image'] = friend_image;
                    // }
                }

            }
            initfindUserInfo(imusernames, cbOK);
            // if (cbOK)
            //     cbOK();
        },
        function (err) {
            alert(err.ErrorInfo);
        }
    );
};

//获取历史消息(c2c或者group)成功回调函数
//msgList 为消息数组，结构为[Msg]
function getHistoryMsgCallback(msgList,prepage) {
    var msg;
    prepage = prepage || false;

    //如果是加载前几页的消息，消息体需要prepend，所以先倒排一下
    if(prepage){
        msgList.reverse();
    }

    for (var j in msgList) {//遍历新消息
        msg = msgList[j];
        if (msg.getSession().id() == chat_data.selToID) {//为当前聊天对象的消息
            chat_data.selSess = msg.getSession();
            //在聊天窗体中新增一条消息
            addMsg(msg,prepage);
        }
    }
    //消息已读上报，并将当前会话的消息设置成自动已读
    // webim.setAutoRead(selSess, true, true);
}

//获取最新的c2c历史消息,用于切换好友聊天，重新拉取好友的聊天消息
var getLastC2CHistoryMsgs = function (cbOk, cbError) {
    if (chat_data.selType == webim.SESSION_TYPE.GROUP) {
        alert('当前的聊天类型为群聊天，不能进行拉取好友历史消息操作');
        return;
    }
    if(!chat_data.selToID || chat_data.selToID=='@TIM#SYSTEM'){
        // alert('当前的聊天id非法，selToID='+chat_data.selToID);
        return;
    }
    var lastMsgTime = 0;//第一次拉取好友历史消息时，必须传0
    var msgKey = '';
    var options = {
        'Peer_Account': chat_data.selToID, //好友帐号
        'MaxCnt': 15, //拉取消息条数
        'LastMsgTime': lastMsgTime, //最近的消息时间，即从这个时间点向前拉取历史消息
        'MsgKey': msgKey
    };
    chat_data.selSess = null;
    webim.MsgStore.delSessByTypeId(chat_data.selType, chat_data.selToID);


    webim.getC2CHistoryMsgs(
        options,
        function (resp) {
            var complete = resp.Complete;//是否还有历史消息可以拉取，1-表示没有，0-表示有

            if (resp.MsgList.length == 0) {
                webim.Log.warn("没有历史消息了:data=" + JSON.stringify(options));
                return;
            }
            getPrePageC2CHistroyMsgInfoMap[chat_data.selToID] = {//保留服务器返回的最近消息时间和消息Key,用于下次向前拉取历史消息
                'LastMsgTime': resp.LastMsgTime,
                'MsgKey': resp.MsgKey
            };
            //清空聊天界面
            chat_data.msglist = [];
            if (cbOk)
                cbOk(resp.MsgList);
        },
        cbError
    );
};

//向上翻页，获取更早的好友历史消息
var getPrePageC2CHistoryMsgs = function (cbOk, cbError) {
    if (chat_data.selType == webim.SESSION_TYPE.GROUP) {
        alert('当前的聊天类型为群聊天，不能进行拉取好友历史消息操作');
        return;
    }
    var tempInfo = getPrePageC2CHistroyMsgInfoMap[chat_data.selToID];//获取下一次拉取的c2c消息时间和消息Key
    var lastMsgTime;
    var msgKey;
    if (tempInfo) {
        lastMsgTime = tempInfo.LastMsgTime;
        msgKey = tempInfo.MsgKey;
    } else {
        alert('没有历史记录');
        return;
    }
    var options = {
        'Peer_Account': chat_data.selToID, //好友帐号
        'MaxCnt': 15, //拉取消息条数
        'LastMsgTime': lastMsgTime, //最近的消息时间，即从这个时间点向前拉取历史消息
        'MsgKey': msgKey
    };
    webim.getC2CHistoryMsgs(
        options,
        function (resp) {
            var complete = resp.Complete;//是否还有历史消息可以拉取，1-表示没有，0-表示有
            if (resp.MsgList.length == 0) {
                webim.Log.warn("没有历史消息了:data=" + JSON.stringify(options));
                return;
            }
            getPrePageC2CHistroyMsgInfoMap[chat_data.selToID] = {//保留服务器返回的最近消息时间和消息Key,用于下次向前拉取历史消息
                'LastMsgTime': resp.LastMsgTime,
                'MsgKey': resp.MsgKey
            };
            if (cbOk){
                cbOk(resp.MsgList);
            }else{
                getHistoryMsgCallback(resp.MsgList,true);
            }

            chat_data.msglist = _(chat_data.msglist).sortBy(function (item) {
                return item.time;
            });
        },
        cbError
    );
};

function open_chat(t, iden, realname, goodsstore_id) {

    if(isNaN(goodsstore_id)){
        goodsstore_id = 0;
    }
    chat_data.selToID = iden;
    chat_data.selType = t;
    chat_data.goodsstore_id = goodsstore_id;
    document.setTitle(realname);
    chat_data.msglist = [];
    initfindUserInfo([iden], function () {

        chat_data.show_contact = false;
        chat_data.show_talk = true;

        chat_data.selKey = chat_data.selType +"_"+ chat_data.selToID+"_"+chat_data.goodsstore_id;

        chat_data.selToRealname = realname;

        var key = chat_data.selType +"_"+ chat_data.selToID+"_"+chat_data.goodsstore_id;
        var sessMap = webim.MsgStore.sessMap();
        for (var i in sessMap) {
            if (chat_data.selToID == sessMap[i].id()) {//更新其他聊天对象的未读消息数
                chat_data.selSess = sessMap[i];
            }
        }
        if(chat_data.selSess==null) {
            chat_data.selSess = new webim.Session(chat_data.selType, chat_data.selToID, chat_data.selToID, chat_data.infoMap[key].image, Math.round(new Date().getTime() / 1000));
        }
        webim.setAutoRead(chat_data.selSess, true, true);
        if(chat_data.recentSessMap[key]){
            home_data.all_unread -= chat_data.recentSessMap[key].UnreadMsgCount;
            chat_data.recentSessMap[key].UnreadMsgCount = 0;
        }

    });

    getLastC2CHistoryMsgs(getHistoryMsgCallback, function (error) {
        console.error(error);
    });

    api.lprogram.get_program_play_url({imusername:iden}).then(function (data) {

        chat_data.program_id = data.result.id;
        chat_data.live_status = data.result.status;
        chat_data.live_config = data.result;

        // wx.onMenuShareTimeline({
        //     title: data.result.host__realname+":"+data.result.name, // 分享标题
        //     link: 'http://www.mmggoo.com/lprogram/redirect_live_page?program_id='+data.result.id, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        //     imgUrl: 'http://www.mmggoo.com/static/weixin/img2/icon.png', // 分享图标
        //     success: function () {
        //         // 用户确认分享后执行的回调函数
        //     },
        //     cancel: function () {
        //         // 用户取消分享后执行的回调函数
        //     }
        // });
        // wx.onMenuShareAppMessage({
        //     title: data.result.host__realname+":"+data.result.name, // 分享标题
        //     desc: data.result.desc, // 分享描述
        //     link: 'http://www.mmggoo.com/lprogram/redirect_live_page?program_id='+data.result.id, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        //     imgUrl: 'http://www.mmggoo.com/static/weixin/img2/icon.png', // 分享图标
        //     type: '', // 分享类型,music、video或link，不填默认为link
        //     dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
        //     success: function () {
        //         // 用户确认分享后执行的回调函数
        //     },
        //     cancel: function () {
        //         // 用户取消分享后执行的回调函数
        //     }
        // });

    });
}


//发送消息(文本或者表情)
function onSendMsg(msgtosend, cb) {

    if (!chat_data.selToID) {
        alert("你还没有选中好友或者群组，暂不能聊天");
        return;
    }
    //获取消息内容
    var msgLen = webim.Tool.getStrBytes(msgtosend);

    if (msgtosend.length < 1) {
        alert("发送的消息不能为空!");
        return;
    }
    var maxLen, errInfo;
    if (chat_data.selType == webim.SESSION_TYPE.C2C) {
        maxLen = webim.MSG_MAX_LENGTH.C2C;
        errInfo = "消息长度超出限制(最多" + Math.round(maxLen / 3) + "汉字)";
    } else {
        maxLen = webim.MSG_MAX_LENGTH.GROUP;
        errInfo = "消息长度超出限制(最多" + Math.round(maxLen / 3) + "汉字)";
    }
    if (msgLen > maxLen) {
        alert(errInfo);
        return;
    }
    if (!chat_data.selSess) {
        var key = chat_data.selType +"_"+ chat_data.selToID + "_"+chat_data.goodsstore_id;
        chat_data.selSess = new webim.Session(chat_data.selType, chat_data.selToID, chat_data.selToID, chat_data.infoMap[key].image, Math.round(new Date().getTime() / 1000));
    }
    var isSend = true;//是否为自己发送
    var seq = -1;//消息序列，-1表示sdk自动生成，用于去重
    var random = Math.round(Math.random() * 4294967296);//消息随机数，用于去重
    var msgTime = Math.round(new Date().getTime() / 1000);//消息时间戳
    var subType;//消息子类型
    if (chat_data.selType == webim.SESSION_TYPE.C2C) {
        subType = webim.C2C_MSG_SUB_TYPE.COMMON;
    } else {
        //webim.GROUP_MSG_SUB_TYPE.COMMON-普通消息,
        //webim.GROUP_MSG_SUB_TYPE.LOVEMSG-点赞消息，优先级最低
        //webim.GROUP_MSG_SUB_TYPE.TIP-提示消息(不支持发送，用于区分群消息子类型)，
        //webim.GROUP_MSG_SUB_TYPE.REDPACKET-红包消息，优先级最高
        subType = webim.GROUP_MSG_SUB_TYPE.COMMON;
    }
    var msg = new webim.Msg(chat_data.selSess, isSend, seq, random, msgTime, identifier, subType, realname);

    var text_obj, face_obj, tmsg, emotionIndex, emotion, restMsgIndex;
    //解析文本和表情
    var expr = /\[[^[\]]{1,3}\]/mg;
    var emotions = msgtosend.match(expr);
    if (!emotions || emotions.length < 1) {
        text_obj = new webim.Msg.Elem.Text(msgtosend);
        msg.addText(text_obj);
    } else {

        for (var i = 0; i < emotions.length; i++) {
            tmsg = msgtosend.substring(0, msgtosend.indexOf(emotions[i]));
            if (tmsg) {
                text_obj = new webim.Msg.Elem.Text(tmsg);
                msg.addText(text_obj);
            }
            emotionIndex = webim.EmotionDataIndexs[emotions[i]];
            emotion = webim.Emotions[emotionIndex];

            if (emotion) {
                face_obj = new webim.Msg.Elem.Face(emotionIndex, emotions[i]);
                msg.addFace(face_obj);
            } else {
                text_obj = new webim.Msg.Elem.Text(emotions[i]);
                msg.addText(text_obj);
            }
            restMsgIndex = msgtosend.indexOf(emotions[i]) + emotions[i].length;
            msgtosend = msgtosend.substring(restMsgIndex);
        }
        if (msgtosend) {
            text_obj = new webim.Msg.Elem.Text(msgtosend);
            msg.addText(text_obj);
        }
    }

    webim.sendMsg(msg, function (resp) {
        if (chat_data.selType == webim.SESSION_TYPE.C2C) {//私聊时，在聊天窗口手动添加一条发的消息，群聊时，长轮询接口会返回自己发的消息
            addMsg(msg);

            var key = chat_data.selType + "_" + chat_data.selToID + "_"+chat_data.goodsstore_id;;
            if(chat_data.recentSessMap[key]){
                chat_data.recentSessMap[key]["UnreadMsgCount"] = 0;
                chat_data.recentSessMap[key]["MsgSeq"] = msg.seq;
                chat_data.recentSessMap[key]["MsgRandom"] = msg.random;
                chat_data.recentSessMap[key]["MsgTime"] = msg.getTime();
                chat_data.recentSessMap[key]["MsgTimeStamp"] = webim.Tool.formatTimeStamp(msg.getTime());
                chat_data.recentSessMap[key]["MsgGroupReadedSeq"] = msg.seq;
                chat_data.recentSessMap[key]["MsgShow"] = msgtosend;
            }

            var find = _(chat_data.contactlist).find(function (item) {
                return item.SessionId == chat_data.selToID;
            });
            if(!find){

                setTimeout(function () {
                    webim_init_contactlist();
                },3000);

            }else{
                find.is_hide=false;
            }



        }
        webim.Tool.setCookie("tmpmsg_" + chat_data.selToID, '', 0);
        if(cb){
            cb();
        }
        turnoffFaces_box();
    }, function (err) {
        alert(err.ErrorInfo);
        // $("#send_msg_text").val('');
    });
}
//上传图片
function uploadPic(elenameid) {
    var uploadFiles = document.getElementById(elenameid);
    var file = uploadFiles.files[0];
    var businessType;//业务类型，1-发群图片，2-向好友发图片
    if (chat_data.selType == webim.SESSION_TYPE.C2C) {//向好友发图片
        businessType = webim.UPLOAD_PIC_BUSSINESS_TYPE.C2C_MSG;
    } else if (chat_data.selType == webim.SESSION_TYPE.GROUP) {//发群图片
        businessType = webim.UPLOAD_PIC_BUSSINESS_TYPE.GROUP_MSG;
    }
    //封装上传图片请求
    var opt = {
        'file': file, //图片对象
        // 'onProgressCallBack': onProgressCallBack, //上传图片进度条回调函数
        //'abortButton': document.getElementById('upd_abort'), //停止上传图片按钮
        'From_Account': identifier, //发送者帐号
        'To_Account': chat_data.selToID, //接收者
        'businessType': businessType//业务类型
    };
    //上传图片
    webim.uploadPic(opt,
        function (resp) {
            //上传成功发送图片
            sendPic(resp);
        },
        function (err) {
            alert(err.ErrorInfo);
        }
    );
}

//发送图片消息
function sendPic(images,imgName) {
    if (!chat_data.selToID) {
        alert("您还没有好友，暂不能聊天");
        return;
    }

    if (!chat_data.selSess) {
        chat_data.selSess = new webim.Session(chat_data.selType, chat_data.selToID, chat_data.selToID, friendHeadUrl, Math.round(new Date().getTime() / 1000));
    }
    var msg = new webim.Msg(chat_data.selSess, true, -1, -1, -1, identifier, 0, realname);
    var images_obj = new webim.Msg.Elem.Images(images.File_UUID);
    for (var i in images.URL_INFO) {
        var img = images.URL_INFO[i];
        var newImg;
        var type;
        switch (img.PIC_TYPE) {
            case 1://原图
                type = 1;//原图
                break;
            case 2://小图（缩略图）
                type = 3;//小图
                break;
            case 4://大图
                type = 2;//大图
                break;
        }
        newImg = new webim.Msg.Elem.Images.Image(type, img.PIC_Size, img.PIC_Width, img.PIC_Height, img.DownUrl);
        images_obj.addImage(newImg);
    }
    msg.addImage(images_obj);
    //if(imgName){
    //    var data=imgName;//通过自定义消息中的data字段保存图片名称
    //    var custom_obj = new webim.Msg.Elem.Custom(data, '', '');
    //    msg.addCustom(custom_obj);
    //}
    //调用发送图片消息接口
    webim.sendMsg(msg, function (resp) {
        if (chat_data.selType == webim.SESSION_TYPE.C2C) {//私聊时，在聊天窗口手动添加一条发的消息，群聊时，长轮询接口会返回自己发的消息
            addMsg(msg);
            var key = chat_data.selType + "_" + chat_data.selToID + "_"+chat_data.goodsstore_id;;
            if(chat_data.recentSessMap[key]){
                chat_data.recentSessMap[key]["UnreadMsgCount"] = 0;
                chat_data.recentSessMap[key]["MsgSeq"] = msg.seq;
                chat_data.recentSessMap[key]["MsgRandom"] = msg.random;
                chat_data.recentSessMap[key]["MsgTimeStamp"] = webim.Tool.formatTimeStamp(msg.getTime());
                chat_data.recentSessMap[key]["MsgGroupReadedSeq"] = msg.seq;
                chat_data.recentSessMap[key]["MsgShow"] = "[图片]";
            }else{
                webim_init_contactlist();
            }
        }
        turnoffFaces_box();
    }, function (err) {
        alert(err.ErrorInfo);
    });
}


//打开表情窗体
var showEmotionDialog = function() {
    if (emotionFlag) {
        $('#wl_faces_box').css({
            "display": "block"
        });
        return;
    }
    emotionFlag = true;

    for (var index in webim.Emotions) {
        var emotions = $('<img>').attr({
            "id": webim.Emotions[index][0],
            "src": webim.Emotions[index][1],
            "style": "cursor:pointer;"
        }).click(function() {
            selectEmotionImg(this);
        });
        $('<li>').append(emotions).appendTo($('#emotionUL'));
    }
    $('#wl_faces_box').css({
        "display": "block"
    });
};

//表情选择div的关闭方法
var turnoffFaces_box = function() {
    chat_data.show_img_talk = false;
    chat_data.show_img_talk_more = false;
};
//选中表情
var selectEmotionImg = function(selImg) {
    var txt = document.getElementsByClassName("msgedit")[0];
    txt.value = txt.value + selImg.id;
    txt.focus();
};

function webim_init_contactlist(cbOK) {
    var reqRecentSessCount = 40;

    var options = {
        'Count': reqRecentSessCount//要拉取的最近会话条数
    };
    webim.getRecentContactList(
        options,
        function (resp) {

            chat_data.contactlist = [];

            var tempSess;//临时会话变量
            var firstSessType;//保存第一个会话类型
            var firstSessId;//保存第一个会话id


            var l = [];
            var userlist = [];
            if (resp.SessionItem && resp.SessionItem.length > 0) {//如果存在最近会话记录

                for (var i in resp.SessionItem) {
                    var item = resp.SessionItem[i];
                    var type = item.Type;//接口返回的会话类型
                    var sessType,typeZh, sessionId, sessionNick='', sessionImage='', senderId='', senderNick='';
                    if (type == webim.RECENT_CONTACT_TYPE.C2C) {//私聊
                        typeZh = '私聊';
                        sessType=webim.SESSION_TYPE.C2C;//设置会话类型
                        sessionId = item.To_Account;//会话id，私聊时为好友ID或者系统账号（值为@TIM#SYSTEM，业务可以自己决定是否需要展示），注意：从To_Account获取,

                        if(sessionId=='@TIM#SYSTEM'){//先过滤系统消息，，
                            webim.Log.warn('过滤好友系统消息,sessionId='+sessionId);
                            continue;
                        }
                        var key=sessType+"_"+sessionId;
                        var c2cInfo=chat_data.infoMap[key];
                        if (c2cInfo && c2cInfo.name) {//从infoMap获取c2c昵称
                            sessionNick = c2cInfo.name;//会话昵称，私聊时为好友昵称，接口暂不支持返回，需要业务自己获取（前提是用户设置过自己的昵称，通过拉取好友资料接口（支持批量拉取）得到）
                        }else{//没有找到或者没有设置过
                            sessionNick = sessionId;//会话昵称，如果昵称为空，默认将其设成会话id
                        }
                        if (c2cInfo && c2cInfo.image) {//从infoMap获取c2c头像
                            sessionImage = c2cInfo.image;//会话头像，私聊时为好友头像，接口暂不支持返回，需要业务自己获取（前提是用户设置过自己的昵称，通过拉取好友资料接口（支持批量拉取）得到）
                        }else{//没有找到或者没有设置过
                            sessionImage = friendHeadUrl;//会话头像，如果为空，默认将其设置demo自带的头像
                        }
                        senderId=senderNick='';//私聊时，这些字段用不到，直接设置为空
                        userlist.push(sessionId)
                    } else if (type == webim.RECENT_CONTACT_TYPE.GROUP) {//群聊
                        typeZh = '群聊';
                        sessType=webim.SESSION_TYPE.GROUP;//设置会话类型
                        sessionId = item.ToAccount;//会话id，群聊时为群ID，注意：从ToAccount获取
                        sessionNick = item.GroupNick;//会话昵称，群聊时，为群名称，接口一定会返回

                        if (item.GroupImage) {//优先考虑接口返回的群头像
                            sessionImage = item.GroupImage;//会话头像，群聊时，群头像，如果业务设置过群头像（设置群头像请参考wiki文档-设置群资料接口），接口会返回
                        } else {//接口没有返回或者没有设置过群头像，再从infoMap获取群头像
                            var key=sessType+"_"+sessionId;
                            var groupInfo=chat_data.infoMap[key];
                            if(groupInfo && groupInfo.image){//
                                sessionImage = groupInfo.image
                            }else{//不存在或者没有设置过，则使用默认头像
                                sessionImage = groupHeadUrl;//会话头像，如果没有设置过群头像，默认将其设置demo自带的头像
                            }
                        }
                        senderId = item.MsgGroupFrom_Account;//群消息的发送者id

                        if(!senderId){//发送者id为空
                            webim.Log.warn('群消息发送者id为空,senderId='+senderId+",groupid="+sessionId);
                            continue;
                        }
                        if(senderId=='@TIM#SYSTEM'){//先过滤群系统消息，因为接口暂时区分不了是进群还是退群等提示消息，
                            webim.Log.warn('过滤群系统消息,senderId='+senderId+",groupid="+sessionId);
                            continue;
                        }

                        senderNick=item.MsgGroupFromCardName;//优先考虑群成员名片
                        if(!senderNick){//如果没有设置群成员名片
                            senderNick = item.MsgGroupFromNickName;//再考虑接口是否返回了群成员昵称
                            if(!senderNick && !sessionNick){//如果接口没有返回昵称或者没有设置群昵称，从infoMap获取昵称
                                var key=webim.SESSION_TYPE.C2C+"_"+senderId;
                                var c2cInfo=infoMap[key];
                                if (c2cInfo && c2cInfo.name) {
                                    senderNick = c2cInfo.name;//发送者群昵称
                                }else{
                                    sessionNick = senderId;//如果昵称为空，默认将其设成发送者id
                                }
                            }
                        }

                    } else {
                        typeZh = '未知类型';
                        sessionId = item.ToAccount;//
                    }
                    if(!sessionId){//会话id为空
                        webim.Log.warn('会话id为空,sessionId='+sessionId);
                        continue;
                    }

                    if(sessionId=='@TLS#NOT_FOUND'){//会话id不存在，可能是已经被删除了
                        webim.Log.warn('会话id不存在,sessionId='+sessionId);
                        continue;
                    }

                    if (sessionNick.length > maxNameLen) {//帐号或昵称过长，截取一部分，出于demo需要，业务可以自己决定
                        sessionNick = sessionNick.substr(0, maxNameLen) + "...";
                    }

                    tempSess=chat_data.recentSessMap[sessType+"_"+sessionId];
                    if(!tempSess){//先判断是否存在（用于去重），不存在增加一个

                        if(!firstSessId){
                            firstSessType=sessType;//记录第一个会话类型
                            firstSessId=sessionId;//记录第一个会话id
                        }
                        tempSess = {
                            SessionType: sessType,//会话类型
                            is_hide:false,
                            SessionIdKey:sessType+"_"+sessionId,
                            SessionId: sessionId,//会话对象id，好友id或者群id
                            SessionNick: sessionNick,//会话昵称，好友昵称或群名称
                            SessionImage:sessionImage,//会话头像，好友头像或者群头像
                            C2cAccount:senderId,//发送者id，群聊时，才有用
                            C2cNick:senderNick,//发送者昵称，群聊时，才有用
                            UnreadMsgCount: item.UnreadMsgCount,//未读消息数,私聊时需要通过webim.syncMsgs(initUnreadMsgCount)获取,参考后面的demo，群聊时不需要。
                            MsgSeq:item.MsgSeq,//消息seq
                            MsgRandom: item.MsgRandom,//消息随机数
                            MsgTime:item.MsgTimeStamp,//消息时间戳
                            MsgTimeStamp:webim.Tool.formatTimeStamp(item.MsgTimeStamp),//消息时间戳
                            MsgGroupReadedSeq: item.MsgGroupReadedSeq || 0,
                            MsgShow: item.MsgShow//消息内容,文本消息为原内容，表情消息为[表情],其他类型消息以此类推
                        };


                        //在左侧最近会话列表框中增加一个会话div
                        // addSess(sessType,webim.Tool.formatText2Html(sessionId), webim.Tool.formatText2Html(sessionNick), sessionImage, item.UnreadMsgCount, 'sesslist');
                    }
                    chat_data.recentSessMap[sessType+"_"+sessionId]= tempSess;


                    l.push(tempSess);

                }


                //清空聊天界面
                // document.getElementsByClassName("msgflow")[0].innerHTML = "";

                // tempSess = recentSessMap[firstSessType+"_"+firstSessId];//选中第一个会话
                // selType = tempSess.SessionType;//初始化当前聊天类型
                //
                // selToID = tempSess.SessionId;//初始化当前聊天对象id
                //
                // selSess = webim.MsgStore.sessByTypeId(selType, selToID);//初始化当前会话对象
                //
                // setSelSessStyleOn(selToID);//设置当前聊天对象选中样式

                webim.syncMsgs(initUnreadMsgCount);//初始化最近会话的消息未读数

                initfindUserInfo(userlist, function () {
                    _(l).each(function (item) {
                        _(chat_data.infoMap).each(function (obj, k) {
                            if(k.indexOf(item.SessionIdKey)==0){
                                chat_data.recentSessMap[k] = chat_data.recentSessMap[item.SessionIdKey];
                                item.SessionIdKey = k;

                            }
                        })
                    });
                    chat_data.contactlist = l;
                    if (cbOK)//回调
                        cbOK();
                });



            }else{
                if (cbOK)//回调
                    cbOK();
            }

        },
        function (err) {
            console.error(err);
        }
    );

}


//监听事件
var listeners = {
    "onConnNotify": onConnNotify//监听连接状态回调变化事件,必填
    , "onMsgNotify": onMsgNotify//监听新消息(私聊，普通群(非直播聊天室)消息，全员推送消息)事件，必填
    // , "onBigGroupMsgNotify": onBigGroupMsgNotify//监听新消息(直播聊天室)事件，直播场景下必填
    // , "onGroupSystemNotifys": onGroupSystemNotifys//监听（多终端同步）群系统消息事件，如果不需要监听，可不填
    , "onGroupInfoChangeNotify": onGroupInfoChangeNotify//监听群资料变化事件，选填
    // , "onFriendSystemNotifys": onFriendSystemNotifys//监听好友系统通知事件，选填
    // , "onProfileSystemNotifys": onProfileSystemNotifys//监听资料系统（自己或好友）通知事件，选填
    , "onKickedEventCall": function (event) {
        webim.Log.warn(event);
    }//被其他登录实例踢下线
    , "onC2cEventNotifys": function (event) {
        webim.Log.warn(event);
    }//监听C2C系统消息通道
};

//监听连接状态回调变化事件
var onConnNotify = function (resp) {
    var info;
    switch (resp.ErrorCode) {
        case webim.CONNECTION_STATUS.ON:
            webim.Log.warn('建立连接成功: ' + resp.ErrorInfo);
            break;
        case webim.CONNECTION_STATUS.OFF:
            info = '连接已断开，无法收到新消息，请检查下你的网络是否正常: ' + resp.ErrorInfo;
            alert(info);
            webim.Log.warn(info);
            break;
        case webim.CONNECTION_STATUS.RECONNECT:
            info = '连接状态恢复正常: ' + resp.ErrorInfo;
            alert(info);
            webim.Log.warn(info);
            break;
        default:
            webim.Log.error('未知连接状态: =' + resp.ErrorInfo);
            break;
    }
};

function delChat(sess_type, to_id, cb) {
    sess_type = sess_type == 'C2C' ? 1 : 2;
    var data = {
        'To_Account': to_id,
        'chatType': sess_type
    }
    webim.deleteChat(
        data,
        cb
    );
}


//监听新消息事件
//newMsgList 为新消息数组，结构为[Msg]
function onMsgNotify(newMsgList) {
    //console.warn(newMsgList);
    var sess, newMsg;
    //获取所有聊天会话
    var sessMap = webim.MsgStore.sessMap();

    for (var j in newMsgList) {//遍历新消息
        newMsg = newMsgList[j];

        if (newMsg.getSession().id() == chat_data.selToID) {//为当前聊天对象的消息
            // selSess = newMsg.getSession();
            //在聊天窗体中新增一条消息
            //console.warn(newMsg);
            addMsg(newMsg);
        }
    }
    //消息已读上报，以及设置会话自动已读标记
    // webim.setAutoRead(selSess, true, true);
    var key;
    var count = 0;
    for (var i in sessMap) {
        sess = sessMap[i];
        if (chat_data.selToID != sess.id()) {//更新其他聊天对象的未读消息数
            // updateSessDiv(sess.type(), sess.id(), sess.unread());
            key = sess.type()+"_"+sess.id();
            // MsgSeq:item.MsgSeq,//消息seq
            //     MsgRandom: item.MsgRandom,//消息随机数
            //     MsgTimeStamp:webim.Tool.formatTimeStamp(item.MsgTimeStamp),//消息时间戳
            //     MsgGroupReadedSeq: item.MsgGroupReadedSeq || 0,
            //     MsgShow: item.MsgShow//消息内容,文本消息为原内容，表情消息为[表情],其他类型消息以此类推
            // webim.setAutoRead(sess, true, true);
            if(chat_data.recentSessMap[key]){
                if(chat_data.recentSessMap[key]["MsgTime"]<sess.msg(sess.msgCount()-1).getTime()){
                    chat_data.recentSessMap[key]["UnreadMsgCount"] += 1;
                    chat_data.recentSessMap[key]["MsgSeq"] = sess.curMaxMsgSeq();
                    chat_data.recentSessMap[key]["MsgRandom"] = sess.msg(sess.msgCount()-1).getRandom();
                    chat_data.recentSessMap[key]["MsgTime"] = sess.msg(sess.msgCount()-1).getTime();
                    chat_data.recentSessMap[key]["MsgTimeStamp"] = webim.Tool.formatTimeStamp(sess.msg(sess.msgCount()-1).getTime());
                    chat_data.recentSessMap[key]["MsgGroupReadedSeq"] = sess.curMaxMsgSeq();
                    chat_data.recentSessMap[key]["MsgShow"] = sess.msg(sess.msgCount()-1).getElems()[0].getContent()['text'];

                }

                count += chat_data.recentSessMap[key]["UnreadMsgCount"]

            }

            var find = _(chat_data.contactlist).find(function (item) {
                return item.SessionId == sess.id();
            });
            if(!find){

                setTimeout(function () {
                    webim_init_contactlist();
                },3000);

            }else{
                find.is_hide = false;
            }
        }
    }
    home_data.all_unread = count;
}

//监听（多终端同步）群系统消息方法，方法都定义在receive_group_system_msg.js文件中
//注意每个数字代表的含义，比如，
//1表示监听申请加群消息，2表示监听申请加群被同意消息，3表示监听申请加群被拒绝消息
// var groupSystemNotifys = {
//     "1": onApplyJoinGroupRequestNotify, //申请加群请求（只有管理员会收到）
//     "2": onApplyJoinGroupAcceptNotify, //申请加群被同意（只有申请人能够收到）
//     "3": onApplyJoinGroupRefuseNotify, //申请加群被拒绝（只有申请人能够收到）
//     "4": onKickedGroupNotify, //被管理员踢出群(只有被踢者接收到)
//     "5": onDestoryGroupNotify, //群被解散(全员接收)
//     "6": onCreateGroupNotify, //创建群(创建者接收)
//     "7": onInvitedJoinGroupNotify, //邀请加群(被邀请者接收)
//     "8": onQuitGroupNotify, //主动退群(主动退出者接收)
//     "9": onSetedGroupAdminNotify, //设置管理员(被设置者接收)
//     "10": onCanceledGroupAdminNotify, //取消管理员(被取消者接收)
//     "11": onRevokeGroupNotify, //群已被回收(全员接收)
//     "255": onCustomGroupNotify//用户自定义通知(默认全员接收)
// };

//监听好友系统通知函数对象，方法都定义在receive_friend_system_msg.js文件中
// var onFriendSystemNotifys = {
//     "1": onFriendAddNotify, //好友表增加
//     "2": onFriendDeleteNotify, //好友表删除
//     "3": onPendencyAddNotify, //未决增加
//     "4": onPendencyDeleteNotify, //未决删除
//     "5": onBlackListAddNotify, //黑名单增加
//     "6": onBlackListDeleteNotify//黑名单删除
// };

//监听资料系统通知函数对象，方法都定义在receive_profile_system_msg.js文件中
// var onProfileSystemNotifys = {
//     "1": onProfileModifyNotify//资料修改
// };

//监听C2C消息通道的处理，方法在receive_new_msg.js文件中
// var onC2cEventNotifys = {
//     "92": onMsgReadedNotify,//消息已读通知
// };

//监听 群资料变化 群提示消息
function onGroupInfoChangeNotify(groupInfo) {
    webim.Log.warn("执行 群资料变化 回调： " + JSON.stringify(groupInfo));
    var groupId = groupInfo.GroupId;
    var newFaceUrl = groupInfo.GroupFaceUrl;//新群组图标, 为空，则表示没有变化
    var newName = groupInfo.GroupName;//新群名称, 为空，则表示没有变化
    var newOwner = groupInfo.OwnerAccount;//新的群主id, 为空，则表示没有变化
    var newNotification = groupInfo.GroupNotification;//新的群公告, 为空，则表示没有变化
    var newIntroduction = groupInfo.GroupIntroduction;//新的群简介, 为空，则表示没有变化

    if (newName) {
        //更新群组列表的群名称
        //To do
        webim.Log.warn("群id=" + groupId + "的新名称为：" + newName);
    }
}


var emoticonlist = ["[惊讶]","[撇嘴]","[色]","[发呆]","[得意]","[流泪]","[害羞]",
    "[闭嘴]","[睡]","[大哭]","[尴尬]","[发怒]","[调皮]","[龇牙]",
    "[微笑]","[难过]","[酷]","[冷汗]","[抓狂]","[吐]","[偷笑]",
    "[可爱]","[白眼]","[傲慢]","[饿]","[困]","[惊恐]","[流汗]",
    "[憨笑]","[大兵]","[奋斗]","[咒骂]","[疑问]","[嘘]","[晕]"]